Page({
  data: {
    // 是否显示倒计时
    isCountDown: false,
    // 倒计时组件的数据
    timeObj: {},
    // 手机号码
    mobile: '',
    // 验证码
    code: '',
  },
  // 校验手机号是否正确
  onMobileValidate() {
    const mobile = this.data.mobile.trim()
    if (/^1[3-9]\d{9}$/.test(mobile)) {
      return true
    } else {
      return wx.utils.toast('手机号码格式不正确')
    }
  },
  // 校验手机号是否正确
  onCodeValidate() {
    const code = this.data.code.trim()
    if (/^\d{6}$/.test(code)) {
      return true
    } else {
      return wx.utils.toast('验证码格式不正确')
    }
  },
  // 页面的事件需要和 data 同级
  // 发送验证码
  async getCode() {
    const isPass = this.onMobileValidate()
    if (!isPass) return
    // 获取验证码时显示倒计时
    this.setData({
      isCountDown: true,
    })
    // 获取验证码
    await wx.http.get('/code', { mobile: this.data.mobile })
    wx.utils.toast('验证码发送成功')
  },
  // 倒计时变化时触发的事件
  onCountDownChange(e) {
    // 保存倒计时组件的数据
    this.setData({
      timeObj: e.detail,
      isCountDown: e.detail.seconds > 0,
    })
  },
  // 登录表单提交
  async onSubmit() {
    // 验证数据
    if (!this.onMobileValidate() || !this.onCodeValidate()) return
    // 解构出数据
    const { mobile, code } = this.data
    // 登录-手机号+验证码登录
    const res = await wx.http.post('/login', { mobile, code })
    // 🟢 保存 token,
    const app = getApp()
    app.setToken(res.data.token, res.data.refreshToken)
    // 获取当前页面栈。最后一个元素为当前页面。
    const pages = getCurrentPages()
    const page = pages[pages.length - 1]
    // 判断重定向的页面是否是 tabbar 页面之一, 🔴 小程序规定 tabbar 页面只能用 switchTab 跳转
    // !page.options.redirectURL 表示没有重定向的页面
    if (wx.utils.isTabBarPage(page.options.redirectURL) || !page.options.redirectURL) {
      // 回跳登录前的页面
      wx.switchTab({
        // page.options 相当于 Vue 的 route.query
        // 如果没有重定向的页面,则跳转到首页
        url: page.options.redirectURL || '/pages/my/index',
      })
    } else {
      // 回跳登录前的页面
      wx.redirectTo({
        // page.options 相当于 Vue 的 route.query
        url: page.options.redirectURL,
      })
    }
  },
})
